#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <setjmp.h>
////第一题、扫雷。
////看了描述，需要有两个二维棋盘。一个负责藏雷、另一个负责展示给玩家周围有几个雷的信息。那么还是老样子，一进来先显示菜单。然后进入游戏里面。
////这里有一个点需要注意：真正显示在屏幕上给玩家看的是9*9的棋盘，但是为了避免在边边角角计算周围8个格子的时候访问越界，所以直接扩大一圈，避免访问越界。
////我还是老样子：二维数组是传数组名、行跟列的。棋盘的初始化：藏雷的棋盘一开始都是'0',表示都没有雷；打印的棋盘一开始都是'*',表示暂未知。
////
//#define ROW 5
//#define COL 5
//#define count 1
//void menu()
//{
//    printf("$$$$$$$$$$$ Welcome to mine clrarance! $$$$$$$$$$$\n");
//    printf("$$$$$$$$$$$           1.Play           $$$$$$$$$$$\n");
//    printf("$$$$$$$$$$$           0.Exit           $$$$$$$$$$$\n");
//    printf("Please input number:");
//}
//
//void Initialize(char arr[ROW][COL],int row,int col,char set)
//{
//    int i = 0,j = 0;
//    for(i = 1;i <= row;i++)
//    {
//        for(j = 1;j <= col;j++)
//        {
//            arr[i][j] = set;
//        }
//    }
//}
//
//void Display(char arr[ROW][COL],int row,int col)
//{
//    printf("-----------Mine clrarance-----------\n");
//    int i = 0,j = 0;
//    for(i = 0;i <= col;i++)//9
//    {
//        printf("%d ",i);
//    }
//    printf("\n");
//   // printf("  ------------------\n");
//    for(i = 1;i <= row;i++)//9
//    {
//        printf("%d ",i);
//        for(j = 1;j <= col;j++)//9
//        {
//           printf("%c ",arr[i][j]);//如果是[0][0],即便是9*9进来，也依然是从11*11的[0][0]开始，所以自然就掩盖了后面的数据。
//        }
//        printf("\n");
//    }
//    printf("-----------Mine clrarance-----------\n");
//}
//
//void Hide(char arr[ROW][COL],int row,int col)//放雷呢，需要保证该位置没有被放过雷，且雷的个数要设置好。
//{//我接收的是一个11行11列的完整棋盘。   11      11
//    int M = count;
//    while(M)
//    {
//        int i = rand()%(row-2)+1;//我需要你布控的雷位置是在9*9的棋盘里面。第0、11行、列消失了。，所以雷的位置是在相对于11*11棋盘的第1~9行、列上。
//        int j = rand()%(col-2)+1;
//        //这个变量的设置还必须在这里面，要不然每次循环进来不会形成新的i跟j.
//        if(arr[i][j] != '1')
//        {
//            arr[i][j] = '1';
//            M--;
//        }
//    }
//}
//
//void Inlay(char arr[ROW][COL],int row,int col,int i,int j,char arr1[ROW][COL],int row1,int col1)
//{
//    int x = i,y = j;
//    char count_1 = '0';
//    for(x =i - 1;x <= i+1;x++)//计算周围8个格子的值
//    {
//        for(y = j-1;y <= j+1;y++)
//        {
//            if(arr[x][y] != arr[i][j] && arr[x][y] == '1')
//            {
//                count_1+=1;
//            }
//        }
//    }
//    arr1[i][j] = count_1;
////    //欠一个递归版本(开花)，下面这些代码是有点作用的，你仔细看一下、推一下。
////    if(count_1 =='0')
////    {
////        arr1[i][j] = ' ';
////    }else
////    {
////        arr1[i][j] = count_1;
////    }
////    //if(i-1 >= 1 || j-1 >= 1 || i+1 <= row || j+1 <= col)，可能是条件，你想一下。
////    if(x-1 >= 1 && y-1 >= 1 && arr[x-1][y-1] == '0')//左上角第一个格子
////    {
////        Inlay(arr,row,col,x-1,y-1,arr1,row1,col1);
////    }
////    if(x-1 >= 1 && arr[x-1][y] == '0')//上面格子
////    {
////        Inlay(arr,row,col,x-1,y,arr1,row1,col1);
////    }
////    if(x-1 >= 1 && y+1 <= col && arr[x-1][y+1] == '0')//右上角第一个格子
////    {
////        Inlay(arr,row,col,x-1,y+1,arr1,row1,col1);
////    }
////    if(x-1 >= 1 && y-1 >= 1 && arr[x-1][y-1] == '0')//左边的格子
////    {
////        Inlay(arr,row,col,x-1,y-1,arr1,row1,col1);
////    }
////    if(y+1 <= col && arr[x][y+1] == '0')//右边的格子
////    {
////        Inlay(arr,row,col,x,y+1,arr1,row1,col1);
////    }
////    if(x+1 <= row && y-1 >= 1 && arr[x-1][y+1] == '0')//左下角第一个格子
////    {
////        Inlay(arr,row,col,x+1,y-1,arr1,row1,col1);
////    }
////    if(x+1 <= row && arr[x+1][y] == '0')//下面格子
////    {
////        Inlay(arr,row,col,x+1,y,arr1,row1,col1);
////    }
////    if(x+1 <= row && y+1 <= col && arr[x-1][y+1] == '0')//左下角第一个格子
////    {
////        Inlay(arr,row,col,x+1,y+1,arr1,row1,col1);
////    }
//
//}
//
//int Sum(char arr1[ROW][COL],int row1,int col1)
//{
//    int count_2 = 0;
//    int i = 0,j = 0;
//    for(i = 1;i <= row1;i++)
//    {
//        for(j = 1;j <= col1;j++)
//        {
//            if(arr1[i][j] == '*')
//            {
//                count_2++;
//            }
//        }
//    }
//    return count_2;
//}
//
//void Signed(char arr1[ROW][COL],int row1,int col1)
//{
//    while(row1 * col1)
//    {
//        printf("Please input your sige coordinate:");
//        int a = 0,b = 0;
//        scanf("%d %d",&a,&b);
//        if(0 < a && a <= row1 && 0 < b && b <= col1)
//        {
//            if(arr1[a][b] == '*')//直接避免了重复点，因为只有点过的已经有'#'标志了。
//            {
//                arr1[a][b] = '#';
//                Display(arr1,ROW-2,COL-2);
//                break;
//            }else
//            {
//                printf("Error,the coordinate was used.\n");
//            }
//        }else
//        {
//            printf("Error,the coordinate is not legal.Please input again.\n");
//        }
//    }
//}
//
//void Find(char arr[ROW][COL],int row,int col,char arr1[ROW][COL],int row1,int col1)
////                                9       9
//{
//    int M = row * col - count;//棋盘里面是包含放雷的格的。
//    while(M)
//    {
//        printf("Please input coordinate:");
//        int i = 0,j = 0;
//        scanf("%d %d",&i,&j);
//        //没有输入过的
//        if(0 < i && i <= row && 0 < j && j <= col)
//        {
//            if(arr1[i][j] != '*' && arr1[i][j] != '#')//只要找展示棋盘没有变成其它字符的的元素即可，变成其它字符表示该字符输入过了，无论是'0'还是'1'。
//            {//好巧妙，输得心服口服。
//                printf("Error,the coordinates have been entered.Please input again.\n");
//            }else if(arr[i][j] == '1')
//            {
//                printf("Game over.\n");//开局就点到了雷直接结束游戏。
//                Display(arr,ROW-2,COL-2);
//                break;
//            }else
//            {
//                Inlay(arr,row,col,i,j,arr1,row1,col1);//把i跟j传进去就可以使用它们的值了。
//                Display(arr1,ROW-2,COL-2);
//                M--;
//                if(M == 0)
//                {
//                    printf("You win.\n");
//                    Display(arr,ROW-2,COL-2);
//                    break;
//                }
//                int g = Sum(arr1,row1,col1);//计算棋盘上还有多少个'*',只要'*'的格数大于0,就可以标志。
//                int h = 0;
//                if(g > 0)
//                {
//                    do
//                    {
//                        printf("Do you want to sign?\n0.Exit  1.Yes\nPlease input number:");
//                        scanf("%d",&h);
//                        if(h == 1)
//                        {
//                            Signed(arr1,row1,col1);
//                            break;
//                        }else if(h == 0)
//                        {
//                            break;
//                        }else
//                        {
//                            printf("Error,please input again.\n");
//                        }
//                    }
//                    while(h);
//                }
//            }
//        }else
//        {
//            printf("Error,please input again.\n");
//        }
//    }
//}
//void game()
//{
//    char hidden[ROW][COL] = {0};
//    char show[ROW][COL] = {0};
//    //初始化棋盘
//    Initialize(hidden,ROW,COL,'0');
//    Initialize(show,ROW,COL,'*');
//    //打印棋盘
//    //Display(hidden,ROW,COL);
//    //Display(show,ROW,COL);
//    //放雷，随机数函数。
//    Hide(hidden,ROW,COL);//如果你截9*9二维数组进去的话，它的9*9棋盘就是那个左上角的正方形而已。
//    //Display(hidden,ROW-2,COL-2);
//    Display(show,ROW-2,COL-2);
//    Find(hidden,ROW-2,COL-2,show,ROW-2,COL-2);//找一定是在有雷的棋盘找的啊，打印是打印展示的棋盘。
//    //Display(show,ROW-2,COL-2);
//}
//int main() {
//    int input = 0;
//    srand((unsigned int)time(NULL));
//    do
//    {
//        menu();
//        scanf("%d",&input);
//        switch(input)
//        {
//            case 1:
//                game();
//                break;//这个break是跳出switch分支语句。
//            case 0:
//                printf("Quit!\n");
//                break;
//            default:
//                printf("Error,please input again.\n");
//                break;
//        }
//    }while(input);
//    return 0;
//}



////第二题、牛客网，小乐乐走台阶。
////小乐乐上课需要走n阶台阶，因为他腿比较长，所以每次可以选择走一阶或者走两阶，那么他一共有多少种走法？
////看着好像是递归。列出1~5台阶的路径结果，发现是斐波那契数列少了第一项。用迭代吧。
//int step(int n)
//{
//    if(n == 1)
//        return 1;
//    else if(n == 2)
//        return 2;
//    else
//        return step(n-1)+ step(n-2);
//}
//int main()
//{
//    int n = 0;
//    int sum = 0;
//    while(1)
//    {
//        scanf("%d",&n);
//        if(1 <= n && n <= 30)
//        {
//            sum = step(n);
//            break;
//        }
//        else{
//            printf("Error.Please input again.\n");
//        }
//    }
//    printf("%d",sum);
//    return 0;
//}

////第三题：牛客网。
////有一个整数序列（可能有重复的整数），现删除指定的某一个整数，输出删除指定数字之后的序列，序列中未被删除数字的前后位置没有发生改变。
////数据范围：序列长度和序列中的值都满足1<=n<=50.
////输入描述：第一行输入一个整数(0≤N≤50)。
////第二行输入N个整数，输入用空格分隔的N个整数。
////第三行输入想要进行删除的一个整数。
////如果有重复的值也要删掉。
////还是要递归再重新判断前面的数字。
//void del(int arr[], int left, int right, int y,int n,int comp){
//    int i = 0;
//    int a = 0;
////    int j = n -1;
//    int count = 0;
//    int count_1 = 0;
//    for (i = 0; i < n; i++) {
//        if (arr[i] == y && i < right) {
//            for (a = i; a < right; a++) {
//                arr[a] = arr[a + 1];
//            }
//            del(arr, left, right-1, y,n-1,comp);
//            break;
//        }
//        if (arr[i] == y && i == right) {
//            count_1++;
//            for (i = 0; i < right; i++) {
//                printf("%d ", arr[i]);
//            }
//            break;
//        }
//    }
//    if(i == n && comp != n)
//    {
//        for (i = 0; i < n; i++) {
//            printf("%d ", arr[i]);
//        }
//    }
////    printf("\n");
//    if (i == n && comp == n) { //找不到这个数。
//        for (i = 0; i < n; i++) {
//            printf("%d ", arr[i]);
//        }
//    }
//}
//
//int main() {
//    int n = 0;
//    printf("-->");
//    scanf("%d", &n);
//    printf("\n");
//    int arr[n];
//    int a = 0, left = 0;
//    printf("-->");
//    for (a = 0; a < n; a++) {
//        scanf("%d", &arr[a]);
//    }
////    for (a = 0; a < n; a++) {
////        printf("%d ", arr[a]);
////    }
//    int right = n - 1;
//    int y = 0;
//    int comp = n;
//    printf("\n");
//    printf("-->");
//    scanf("%d", &y);
//    del(arr, left, right, y,n,comp);
//    return 0;
//}

////第四题、牛客网。
////输入n个成绩，换行输出n个成绩中最高分数和最低分数的差。
////输入描述：
////两行，第一行为n，表示n个成绩，不会大于10000。
////第二行为n个成绩（整数表示，范围0~100），以空格隔开。
////找最大值跟最小值，这个不是冒泡？
//int Max(int arr[],int n)
//{
//    int a =0;
//    int max_1 = arr[0];//假定第一个元素最大
//    for(a = 1;a < n;a++)
//    {
//        if(arr[a] > max_1)
//        {
//            max_1 = arr[a];
//        }
//    }
//    return max_1;
//}
//int Min(int arr[],int n)
//{
//    int a =0;
//    int min_1 = arr[0];//假定第一个元素最小
//    for(a = 1;a < n;a++)
//    {
//        if(arr[a] < min_1)
//        {
//            min_1 = arr[a];
//        }
//    }
//    return min_1;
//}
//int main()
//{
//    int n = 0;
//    scanf("%d",&n);
//    int arr[n];
//    int i = 0;
//    for(i = 0;i < n;i++)
//    {
//        scanf("%d",&arr[i]);
//    }
//    int left = 0;
//    int max = Max(arr,n);
//    int min = Min(arr,n);
//    int value = max - min;
//    printf("%d",value);
//    return 0;
//}

//第五题、牛客网。
//实现字母的大小写转换。多组输入输出。
//输入描述：多组输入，每一行输入大写字母。
//输出描述：针对每组输入输出对应的小写字母。




////第六题、牛客网。
////KiKi想判断输入的字符是不是字母，请帮他编程实现。
////输入描述：多组输入，每一行输入一个字符。
////输出描述：针对每组输入，输出单独占一行，判断输入字符是否为字母，输出内容详见输出样例。
//int main()
//{
//    char alph = 0;
//    while(scanf("%c",&alph) == 1)
//    {
//        if((('A' <= alph) && (alph <= 'Z')) || (('a' <= alph)&&(alph <= 'z')))
//            printf("%c is an alphabet.\n",alph);
//        else
//            printf("%c is not an alphabet.\n",alph);
//        getchar();
//    }
//    return 0;
//}

////第七题、牛客网删了。
////KiKi参加了语文、数学、外语的考试，请帮他判断三科中的最高分。从键盘任意输入三个整数表示的分数，编程判断其中的最高分。
////数据范围0<=n<=100
////输入描述：输入一行包括三个整数表示的分数（0~100），用空格隔开。
////输出描述：输出为一行，即三个分数中的最高分。
//int main()
//{
//    int arr[3] = {0};
//    int i = 0;
//    int max = 0;
//    for(i = 0;i < 3;i++)
//    {
//        scanf("%d",&arr[i]);
//        if(arr[i] > max)
//            max = arr[i];
//    }
//    printf("%d",max);
//    return 0;
//}


////第八题：牛客网
////变种水仙花
////变种水仙花数 - Lily Number：把任意的数字，从中间拆分成两个数字，比如1461 可以拆分成（1和461）,（14和61）,（146和1),
////如果所有拆分后的乘积之和等于自身，则是一个Lily Number。
////例如：655 = 6 * 55 + 65 * 5；       1461 = 1*461 + 14*61 + 146*1
////求出 5位数中的所有 Lily Number。
//int main()
//{
//    int n = 0;
//    //dismantle(n);
//    for(n = 10000;n <= 99999;n++)
//    {   int a = (n/10)*(n%10);
//        int b = (n/100)*(n%100);
//        int c = (n/1000)*(n%1000);
//        int d = (n/10000)*(n%10000);
//        int e = a + b + c+ d;
//        if(e == n)
//            printf("%d ",n);
//    }
//    return 0;
//}
